package com.bjpowernode.javase.exception;
/*
    1、java语言中对编译时异常的处理包括两种方式：
        第一(异常上抛)：在方法声明的位置上，使用throws关键字，抛给上一级，谁调用我，我就抛给谁，类似于推卸责任
            一般不建议在main方法上使用mains，因为异常如果真正发生了，一定会抛给JVM，JVM只有终止，故在main方法上采用try..catch方法
        第二(异常捕捉)：使用try..catch语句进行异常的捕捉，异常真正的解决了
            * catch后面的小括号中的类型可以是具体的异常类型，也可以是该异常类型的父类型
            * catch可以写多个，建议catch的时候，精确地一个一个处理，这样有利于程序的调试
            * catch写多个的时候，从上到下，必须遵守从小到大

        只要异常没有捕捉，采用上报的方式，此方法的后续代码不会执行
        另外需要注意，try语句块中的某一行出现异常，该行后面的代码不会执行
        try..catch捕捉异常后，后续代码可以执行

        如何选择：
            希望调用者来处理，选择throws上报，其余情况采用捕捉的方式
 */
public class ExceptionTest02 {
    public static void main(String[] args) {
        //public static void main(String[] args) throws ClassNotFoundException{  //解决方案2
        //doSome()；
        //编译器报错：Unhandled exception: java.lang.ClassNotFoundException
        //ClassNotFoundException的直接父类是Exception，故是编译时异常，必须预先处理
        try {              //解决方案1
            doSome();
        } catch (ClassNotFoundException e) {
            //这个分支中可以使用e引用，e引用保存的内存地址是那个new出来异常对象的内存地址
            //catch是捕捉异常之后走的分支
            //在catch分支中捕捉异常
            e.printStackTrace();
        } catch (Exception e){

        }
    }

    public static void doSome() throws ClassNotFoundException{
        System.out.println("文梦甜");
    }
}
